package com.yeung.swordoffer;

import java.util.HashMap;
import java.util.Map;

/**
 * 题目描述
 * 一个整型数组里除了两个数字之外，其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 */

public class 数组中只出现一次的数字 {
    public static void main(String[] args) {
//        int[] arr={2,4,3,6,3,2,5,5};
        int[] arr = {4, 6, 2, 2, 3, 3, 8, 8, 9, 9, 1000000, 1000000};
        int[] a = new int[1];
        int[] b = new int[1];
        FindNumsAppearOnce(arr, a, b);
    }

    //num1,num2分别为长度为1的数组。传出参数
    //将num1[0],num2[0]设置为返回结果
    public static void FindNumsAppearOnce(int[] array, int num1[], int num2[]) {
        Map<Integer, Integer> map = new HashMap<>();
        //将array中的数字作为 tmp数组相应的小标
        for (int i = 0; i < array.length; i++) {
            if (!map.containsKey(array[i])) map.put(array[i], 1);
            else {
                map.put(array[i], map.get(array[i]) + 1);
            }
        }
        final boolean[] isF = {true};
        map.forEach((key, val) -> {
            if (val == 1 && isF[0]) {
                num1[0] = key;
                isF[0] = false;
            }
            if (val == 1 && !isF[0]) num2[0] = key;

        });
    }


}
